package edu.uoc.tds.pec4.vista;

import edu.uoc.tds.pec4.model.SS1_CentroDocente;
import edu.uoc.tds.pec4.model.SS1_Universidad;
import edu.uoc.tds.pec4.util.ExceptionUtils;
import edu.uoc.tds.pec4.util.LanguageUtils;
import edu.uoc.tds.pec4.vista.base.JPanelBase;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.rmi.RemoteException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;

/**
 * Tecnicas de Desarrollo de Software - (UOC)
 *
 * @author Grupo Magicsoftware
 * @version 1.0
 */
public class SS1_PanelGestionarCentroDocente extends JPanelBase {
    private SS4_PantallaMenu padre;
    private JButton jb_aceptar;
    private JButton jb_cancelar;
    private List<JLabel> labels;
    private List<JTextField> textfields;
    private JTextArea jta_direccion;
    private JTextArea jta_web;
    private JComboBox jcb_universidad;
    private JComboBox jcb_pais;
    private List<String> paises;
    private List<SS1_Universidad> universidades;
    private List<String> nombresUniversidades;
    private SS1_PanelConsultaCentrosDocentes consulta;
    private SS1_CentroDocente centroEditado;

    public SS1_PanelGestionarCentroDocente(SS4_PantallaMenu padre) {
        super(new BorderLayout());
        this.padre = padre;
        iniciarComponentes();
    }

    private void iniciarComponentes(){
        jb_aceptar = new JButton(LanguageUtils.getMessage
                ("SS1.Aceptar"));
        jb_aceptar.setFocusable(false);
        jb_cancelar = new JButton(LanguageUtils.getMessage
                ("SS1.Cancelar"));
        jb_cancelar.setFocusable(false);
        JPanel pSur = new JPanel();
        pSur.add(jb_aceptar);
        pSur.add(jb_cancelar);
        add(pSur, BorderLayout.SOUTH);

        labels = new ArrayList<JLabel>();
        for (int i = 0; i < 9;i++){
            JLabel l = new JLabel(LanguageUtils.getMessage
                ("SS1_PanelGC.label" + i));
            l.setFocusable(false);
            labels.add(l);
        }

        textfields = new ArrayList<JTextField>();
        for (int i = 0; i < 5;i++){
            JTextField tf = new JTextField();
            tf.setText("");
            tf.setColumns(10);
            textfields.add(tf);
        }
        textfields.get(0).setColumns(50);
        textfields.get(1).setColumns(50);
        textfields.get(2).setColumns(5);
        textfields.get(3).setColumns(50);
        textfields.get(4).setColumns(14);
        jta_web = new JTextArea(3, 50);
        jta_web.setLineWrap(true);
        jta_web.setWrapStyleWord(true);
        jta_direccion = new JTextArea(8, 50);
        jta_direccion.setLineWrap(true);
        jta_direccion.setWrapStyleWord(true);

        try {
            paises = padre.getRemotoMantenimiento().getPaises();
        } catch (SQLException ex) {
            ExceptionUtils.visualizarError(LanguageUtils.getMessage("ERR_SQL"));
        } catch (RemoteException ex) {
            ExceptionUtils.visualizarError(LanguageUtils.getMessage("ERR_Remote"));
        }
        jcb_pais = new JComboBox(paises.toArray());

        try {
            universidades = padre.getRemotoMantenimiento().getUniversidades();
        } catch (SQLException ex) {
            ExceptionUtils.visualizarError(LanguageUtils.getMessage("ERR_SQL"));
        } catch (RemoteException ex) {
            ExceptionUtils.visualizarError(LanguageUtils.getMessage("ERR_Remote"));
        }
        nombresUniversidades = new ArrayList<String>();
        for (int i = 0;i < universidades.size();i++) {
            nombresUniversidades.add(universidades.get(i).getNombre());
        }
        jcb_universidad = new JComboBox(nombresUniversidades.toArray());

        JPanel pCentro = new JPanel();
        ArrayList<JPanel> paneles = new ArrayList<JPanel>();
        for (int i = 0; i < 7; i++) {
            paneles.add(new JPanel());
        }
        paneles.get(0).setPreferredSize(new Dimension(700, 30));
        paneles.get(0).add(labels.get(1));
        paneles.get(0).add(textfields.get(0));
        paneles.get(1).setPreferredSize(new Dimension(700, 30));
        paneles.get(1).add(labels.get(0));
        paneles.get(1).add(jcb_universidad);
        paneles.get(2).setPreferredSize(new Dimension(700, 140));
        paneles.get(2).add(labels.get(2));
        paneles.get(2).add(jta_direccion);
        paneles.get(3).setPreferredSize(new Dimension(700, 30));
        paneles.get(3).add(labels.get(3));
        paneles.get(3).add(textfields.get(1));
        paneles.get(4).setPreferredSize(new Dimension(700, 30));
        paneles.get(4).add(labels.get(8));
        paneles.get(4).add(textfields.get(4));
        paneles.get(4).add(labels.get(6));
        paneles.get(4).add(jcb_pais);
        paneles.get(4).add(labels.get(4));
        paneles.get(4).add(textfields.get(2));
        paneles.get(5).setPreferredSize(new Dimension(700, 30));
        paneles.get(5).add(labels.get(5));
        paneles.get(5).add(textfields.get(3));
        paneles.get(6).setPreferredSize(new Dimension(700, 100));
        paneles.get(6).add(labels.get(7));
        paneles.get(6).add(jta_web);

        for (int i = 0; i < paneles.size(); i++) {
            pCentro.add(paneles.get(i));
        }
        add(pCentro, BorderLayout.CENTER);
        jb_aceptar.addActionListener(padre);
        jb_cancelar.addActionListener(padre);
    }

    @Override
    public void componentePulsado(ActionEvent e) {
        if (e.getSource() == jb_aceptar){
            try {
                if (consulta == null){
                    SS1_CentroDocente centro = getCentro();
                    if (centro != null) {
                        padre.getRemotoMantenimiento().insertCentroDocente(centro);
                        padre.setPanelCentral(new SS4_PanelInicial());
                    }
                } else {
                    SS1_CentroDocente centro = getCentro();
                    if (centro != null){
                        padre.getRemotoMantenimiento().updateCentroDocente(centroEditado.getId(),
                                centro);
                        padre.setPanelCentral(consulta);
                        padre.repaint();
                    }
                }
            } catch (SQLException ex) {
                ExceptionUtils.visualizarError(LanguageUtils.getMessage("ERR_SQL"));
            } catch (RemoteException ex) {
                ExceptionUtils.visualizarError(LanguageUtils.getMessage("ERR_Remote"));
            }
        } else if (e.getSource() == jb_cancelar){
            if (consulta == null) padre.setPanelCentral(new SS4_PanelInicial());
            else {
                padre.setPanelCentral(consulta);
                padre.repaint();
            }
        }
    }
    
    private SS1_CentroDocente getCentro(){
        if (centroEditado == null) centroEditado = new SS1_CentroDocente();
        
        if (isNotNull(textfields.get(0).getText(), labels.get(1)))
            centroEditado.setNombre(textfields.get(0).getText());
        else return null;
        if (isNotNull(jta_direccion.getText(), labels.get(2)))
            centroEditado.setDireccion(jta_direccion.getText());
        else return null;
        if (isNotNull(textfields.get(1).getText(), labels.get(3)))
            centroEditado.setLocalidad(textfields.get(1).getText());
        else return null;
        try {
            if (isNotNull(textfields.get(2).getText(), labels.get(4)))
            centroEditado.setCodigoPostal(Integer.parseInt(textfields.get(2).getText()));
            else return null;
        } catch (NumberFormatException e) {
            ExceptionUtils.visualizarInformacion(LanguageUtils.getMessage("SS1_Mensaje2") +
                    " " + labels.get(4).getText().toUpperCase() + " " +
                    LanguageUtils.getMessage("SS1_Mensaje3"));
        }
        centroEditado.setPaisResidencia(paises.get(jcb_pais.getSelectedIndex()));
        if (isNotNull(textfields.get(4).getText(), labels.get(8)))
            centroEditado.setTelefono(textfields.get(4).getText());
        else return null;
        centroEditado.setEmail(textfields.get(3).getText());
        centroEditado.setWeb(jta_web.getText());
        centroEditado.setUniversidad(universidades.get(jcb_universidad.getSelectedIndex()));

        if (consulta == null){
            centroEditado.setActivo(true);
            Date d = new Date(System.currentTimeMillis());
            centroEditado.setFechaActividad(d);
            centroEditado.setFechaAlta(d);
        }
        
        return centroEditado;
    }
    
    public void setCentro(SS1_CentroDocente centro){
        centroEditado = centro;

        textfields.get(0).setText(centro.getNombre());
        jta_direccion.setText(centro.getDireccion());
        textfields.get(1).setText(centro.getLocalidad());
        textfields.get(2).setText(Integer.toString(centro.getCodigoPostal()));
        jcb_pais.setSelectedItem(centro.getPaisResidencia());
        textfields.get(4).setText(centro.getTelefono());
        textfields.get(3).setText(centro.getEmail());
        jta_web.setText(centro.getWeb());
        jcb_universidad.setSelectedItem(centro.getUniversidad().getNombre());
    }

    private boolean isNotNull(String text, JLabel l){
        if (text.equals("") || text == null){
            ExceptionUtils.visualizarInformacion(LanguageUtils.getMessage("SS1_Mensaje2") +
                    " " + l.getText().toUpperCase() + " " +
                    LanguageUtils.getMessage("SS1_Mensaje3"));
            return false;
        }
        return true;
    }

    public SS1_PanelConsultaCentrosDocentes getConsulta() {
        return consulta;
    }

    public void setConsulta(SS1_PanelConsultaCentrosDocentes consulta) {
        this.consulta = consulta;
        jb_cancelar.setText(LanguageUtils.getMessage("SS1.Volver"));
    }
}
